//
//  Service+SPMember.m
//  BaseProject
//
//  Created by Sailer Guo on 2019/11/27.
//  Copyright © 2019 Base. All rights reserved.
//

#import "HTTPService+Member.h"

@implementation HTTPService (Member)

/*
 目标：获取signal 的持有的返回类型，然后在请求成功的block直接序列化，这样返回到上层的就是封装好的model，
 正对返回数据可以分为两大类型
 1. 数组类型：使用数组接收，同时把数组中的元素都直接转化为相应的对象；
 2. 字典类型：直接用一个相应的对象接受，可能有对象的嵌套；
 针对这两种类型的返回数据，标准化处理整个请求到响应数据的封装过程。最终实现用脚本一键生成所以的API，
 提高开发效率。
 当然还有很多细节需要处理，但是现在有这样一个思路，希望能在这个工程中实践。
 */

- (RACSignal *)selectDailySign:(NSString *)memberSid {
    
    // 参数,校验是否缺少必须参数
    NSDictionary *parameters = @{@"memberSid":memberSid};
    NSArray *necessaryKeys = @[@"memberSid"];
    NSAssert([self didParameters:parameters containNecessaryKeys:necessaryKeys], @"缺少必要参数");
    
    // URL
    NSString *url = @"member/selectDailysign";
    
    RACTuple *tuple = [RACTuple tupleWithObjects:@(POST),url,parameters,@(HTTPServiceTypeIntelligent), nil];
    
    RACSignal *signal = [self signalProduce:tuple withDecodeClass:nil isList:YES];
    
    return signal;
}

- (RACSignal *)selecteUserInfoBy:(NSString *)memberSid {
    
    NSDictionary *parameters = @{};
    NSArray *necessaryKeys = @[];
    
    NSAssert([self didParameters:parameters containNecessaryKeys:necessaryKeys], @"缺少必要参数");
    NSString *url = @"selectMemberInfoBySid";
    url = [NSString stringWithFormat:@"%@/%@",url,memberSid];
    RACTuple *tuple = [RACTuple tupleWithObjects:@(POST),url,@{},@(HTTPServiceTypeCenter), nil];
    
    return [self signalProduce:tuple withDecodeClass:nil isList:NO];
}

- (RACSignal *)uploadFile:(NSData *)file withKey:(NSString *)key {
    NSDictionary *parameters = @{@"uploadFile":file};
    NSArray *necessaryKeys = @[@"uploadFile"]; // 必须的参数
    
    // 校验是否缺少必须参数
    NSAssert([self didParameters:parameters containNecessaryKeys:necessaryKeys], @"缺少必要参数");
    NSString *url = @"memberInfo/userPic";
    RACTuple *tuple = [RACTuple tupleWithObjects:@(POST),url,parameters,@(HTTPServiceTypeCenter), nil];
    
    return [self uploadFileSignal:tuple];
}

- (RACSignal *)saveUserInfo:(NSDictionary *)userInfo {
    NSDictionary *parameters = userInfo;
    NSArray *necessaryKeys = @[]; // 必须的参数
    
    // 校验是否缺少必须参数
    NSAssert([self didParameters:parameters containNecessaryKeys:necessaryKeys], @"缺少必要参数");
    NSString *url = @"member/savePersonalOfWechat";
    RACTuple *tuple = [RACTuple tupleWithObjects:@(POST),url,parameters,@(HTTPServiceTypeCenter), nil];
    return [self signalProduce:tuple withDecodeClass:nil isList:NO];
}

@end

